{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#                                           numpy 练习题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### numpy 的array操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1.导入numpy库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.建立一个一维数组 a 初始化为[4,5,6], (1)输出a 的类型（type）(2)输出a的各维度的大小（shape）(3)输出 a的第一个元素（值为4）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "(3,)\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "a = np.array([4,5,6])\n",
    "print(type(a))\n",
    "print(a.shape)\n",
    "print(a[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.建立一个二维数组 b,初始化为 [ [4, 5, 6],[1, 2, 3]] (1)输出各维度的大小（shape）(2)输出 b(0,0)，b(0,1),b(1,1) 这三个元素（对应值分别为4,5,2）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 3)\n",
      "4 5 2\n"
     ]
    }
   ],
   "source": [
    "b = np.array([[4,5,6], [1,2,3]])\n",
    "print(b.shape)\n",
    "print(b[0][0], b[0][1], b[1][1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.  (1)建立一个全0矩阵 a, 大小为 3x3; 类型为整型（提示: dtype = int）(2)建立一个全1矩阵b,大小为4x5;  (3)建立一个单位矩阵c ,大小为4x4; (4)生成一个随机数矩阵d,大小为 3x2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0 0 0]\n",
      " [0 0 0]\n",
      " [0 0 0]]\n",
      "[[1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]]\n",
      "[[1. 0. 0. 0.]\n",
      " [0. 1. 0. 0.]\n",
      " [0. 0. 1. 0.]\n",
      " [0. 0. 0. 1.]]\n",
      "[[0.64019228 0.24396234]\n",
      " [0.84058351 0.36276133]\n",
      " [0.89515032 0.74861905]]\n"
     ]
    }
   ],
   "source": [
    "a = np.zeros((3,3), dtype=int)\n",
    "print(a)\n",
    "b = np.ones((4,5))\n",
    "print(b)\n",
    "c = np.identity(4)\n",
    "print(c)\n",
    "d = np.random.random((3,2))\n",
    "print(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. 建立一个数组 a,(值为[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] ) ,(1)打印a; (2)输出  下标为(2,3),(0,0) 这两个数组元素的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1  2  3  4]\n",
      " [ 5  6  7  8]\n",
      " [ 9 10 11 12]]\n",
      "12 1\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])\n",
    "print(a)\n",
    "print(a[2][3], a[0][0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6.把上一题的 a数组的 0到1行 2到3列，放到b里面去，（此处不需要从新建立a,直接调用即可）(1),输出b;(2) 输出b 的（0,0）这个元素的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[2 3]\n",
      " [6 7]]\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "b = a[0:2, 1:3]\n",
    "print(b)\n",
    "print(b[0][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " #### 7. 把第5题中数组a的最后两行所有元素放到 c中，（提示： a[1:2, :]）(1)输出 c ; (2) 输出 c 中第一行的最后一个元素（提示，使用 -1                 表示最后一个元素）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 5  6  7  8]\n",
      " [ 9 10 11 12]]\n",
      "8\n"
     ]
    }
   ],
   "source": [
    "c = a[1:3, :]\n",
    "print(c)\n",
    "print(c[0][3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 8.建立数组a,初始化a为[[1, 2], [3, 4], [5, 6]]，输出 （0,0）（1,1）（2,0）这三个元素（提示： 使用 print(a[[0, 1, 2], [0, 1, 0]]) ）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 4 5]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2], [3, 4], [5, 6]])\n",
    "print(a[[0,1,2],[0,1,0]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 9.建立矩阵a ,初始化为[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]，输出(0,0),(1,2),(2,0),(3,1) (提示使用 b = np.array([0, 2, 0, 1])                     print(a[np.arange(4), b]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1  6  7 11]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])\n",
    "b = np.array([0,2,0,1])\n",
    "print(a[np.arange(4), b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 10.对9 中输出的那四个元素，每个都加上10，然后重新输出矩阵a.(提示： a[np.arange(4), b] += 10 ）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[11  2  3]\n",
      " [ 4  5 16]\n",
      " [17  8  9]\n",
      " [10 21 12]]\n"
     ]
    }
   ],
   "source": [
    "a[np.arange(4), b] += 10 \n",
    "print(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### array 的数学运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 11.  执行 x = np.array([1, 2])，然后输出 x 的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "x = np.array([1,2])\n",
    "print(type(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 12.执行 x = np.array([1.0, 2.0]) ，然后输出 x 的数据类类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "float64\n"
     ]
    }
   ],
   "source": [
    "x = np.array([1.0, 2.0])\n",
    "print(x.dtype)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 13.执行 x = np.array([[1, 2], [3, 4]], dtype=np.float64) ，y = np.array([[5, 6], [7, 8]], dtype=np.float64)，然后输出 x+y ,和 np.add(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 6.  8.]\n",
      " [10. 12.]]\n",
      "[[ 6.  8.]\n",
      " [10. 12.]]\n"
     ]
    }
   ],
   "source": [
    "x = np.array([[1, 2], [3, 4]], dtype=np.float64) \n",
    "y = np.array([[5, 6], [7, 8]], dtype=np.float64)\n",
    "print(x+y)\n",
    "print(np.add(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 14. 利用 13题目中的x,y 输出 x-y 和 np.subtract(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-4. -4.]\n",
      " [-4. -4.]]\n",
      "[[-4. -4.]\n",
      " [-4. -4.]]\n"
     ]
    }
   ],
   "source": [
    "print(x-y)\n",
    "print(np.subtract(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 15. 利用13题目中的x，y 输出 x*y ,和 np.multiply(x, y) 还有  np.dot(x,y),比较差异。然后自己换一个不是方阵的试试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 5. 12.]\n",
      " [21. 32.]]\n",
      "[[ 5. 12.]\n",
      " [21. 32.]]\n",
      "[[1. 2.]\n",
      " [3. 4.]] [[5. 6.]\n",
      " [7. 8.]] [[19. 22.]\n",
      " [43. 50.]]\n"
     ]
    }
   ],
   "source": [
    "print(x*y)\n",
    "print(np.multiply(x,y))\n",
    "print(x,y,np.dot(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 16. 利用13题目中的x,y,输出 x / y .(提示 ： 使用函数 np.divide())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.2        0.33333333]\n",
      " [0.42857143 0.5       ]]\n",
      "[[0.2        0.33333333]\n",
      " [0.42857143 0.5       ]]\n"
     ]
    }
   ],
   "source": [
    "print(x/y)\n",
    "print(np.divide(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 17. 利用13题目中的x,输出 x的 开方。(提示： 使用函数 np.sqrt() )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.         1.41421356]\n",
      " [1.73205081 2.        ]]\n"
     ]
    }
   ],
   "source": [
    "print(np.sqrt(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 18.利用13题目中的x,y ,执行 print(x.dot(y)) 和 print(np.dot(x,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[19. 22.]\n",
      " [43. 50.]]\n",
      "[[19. 22.]\n",
      " [43. 50.]]\n"
     ]
    }
   ],
   "source": [
    "print(x.dot(y))\n",
    "print(np.dot(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 19.利用13题目中的 x,进行求和。提示：输出三种求和 (1)print(np.sum(x)):   (2)print(np.sum(x，axis =0 ));   (3)print(np.sum(x,axis = 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.0\n",
      "[4. 6.]\n",
      "[3. 7.]\n"
     ]
    }
   ],
   "source": [
    "print(np.sum(x))\n",
    "print(np.sum(x, axis=0))\n",
    "print(np.sum(x, axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 20.利用13题目中的 x,进行求平均数（提示：输出三种平均数(1)print(np.mean(x)) (2)print(np.mean(x,axis = 0))(3) print(np.mean(x,axis =1))）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.5\n",
      "[2. 3.]\n",
      "[1.5 3.5]\n"
     ]
    }
   ],
   "source": [
    "print(np.mean(x))\n",
    "print(np.mean(x,axis = 0))\n",
    "print(np.mean(x,axis =1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 21.利用13题目中的x，对x 进行矩阵转置，然后输出转置后的结果，（提示： x.T 表示对 x 的转置）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 3.]\n",
      " [2. 4.]]\n"
     ]
    }
   ],
   "source": [
    "print(x.T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 22.利用13题目中的x,求e的指数（提示： 函数 np.exp()）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 2.71828183  7.3890561 ]\n",
      " [20.08553692 54.59815003]]\n"
     ]
    }
   ],
   "source": [
    "print(np.exp(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 23.利用13题目中的 x,求值最大的下标（提示(1)print(np.argmax(x)) ,(2) print(np.argmax(x, axis =0))(3)print(np.argmax(x),axis =1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 24,画图，y=x*x 其中 x = np.arange(0, 100, 0.1) （提示这里用到  matplotlib.pyplot 库）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<function matplotlib.pyplot.show(close=None, block=None)>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0, 100, 0.1)\n",
    "plt.plot(x, x*x)\n",
    "plt.show"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 25.画图。画正弦函数和余弦函数， x = np.arange(0, 3 * np.pi, 0.1)(提示：这里用到 np.sin() np.cos() 函数和 matplotlib.pyplot 库)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0, 3 * np.pi, 0.1)\n",
    "plt.plot(x, np.sin(x), 'r--', x, np.cos(x), 'bs')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
